package com.zsrt.devbase.common.utils;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * url匹配类
 * 
 * @author lzj
 *
 */
public class PatternUtil {
	
	/**
	 * 
	 * 当条件满足时，将返回true，否则返回false
	 * url 数据库中的权限路径
	 * uri请求路径
	 * 
	 */ 
	public static boolean url(String url, String uri) {
		boolean flas = false;
		//匹配是否有“/”
		Pattern pattern2 = Pattern.compile(".*/.*");
		Matcher matcher1 = pattern2.matcher(url);
		// 如果有返回true 没有则是false
		boolean b2 = matcher1.matches();
		if (b2) {
			//对传进了来的路径进行截取
			String r= uri.substring(uri.indexOf("/")+1);
			int s2 = url.indexOf("/");
			String s1 = url.substring(0, s2);
			//以截取路径开头的就匹配，否则返回false
			Pattern pattern1 = Pattern.compile("^" + s1 + ".*");
			Matcher m = pattern1.matcher(r);
			flas = m.matches();// 匹配成功返回true
		} else {
			//传过来的url没有‘/’，不必截取则直接与其相匹配
			Pattern pattern3 = Pattern.compile("^" + url);
			Matcher m = pattern3.matcher(uri);
			flas = m.matches();
		}

		return flas;

	}

	/**
	 * 判断字符串value是否匹配正则表达式reg
	 * @param reg
	 * @param value
	 * @return
	 */
	public static boolean matches(String reg,String value){
		Pattern pattern = Pattern.compile(reg);
		Matcher m = pattern.matcher(value);
		return m.matches();
	}
	
	/**
	 * 判断是否能在字符串value中查找到与正则表达式reg规则相符的字符串
	 * @param reg
	 * @param value
	 * @return
	 */
	public static boolean find(String reg,String value){
		Pattern pattern = Pattern.compile(reg);
		Matcher m = pattern.matcher(value);
		return m.find();
	}
	
	/**
	 * 计算中英文混合字符串的实际长度
	 * @param value 字符串（可中英文混合）
	 * @param chineseLen 单个汉字的长度
	 * @return
	 */
	public static int chineseLength(String value,int chineseLen){
		if (StringUtil.isEmpty(value)) {
			return 0;
		}
		Pattern p = Pattern.compile("[\u4E00-\u9FA5]+");  
        Matcher m = p.matcher(value);
        int total = value.length();
        //所有汉字长度之和
        int count = 0;
        while (m.find()){  
        	//返回所匹配的中文
        	String temp = m.group(0);
        	//减掉原有长度
            total = total-temp.length();
            //再加上数据库占用的实际长度
            count = count+temp.length()*chineseLen;
        }
		return total + count; 
	}
	
}
